home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 1 / ETO Development Tools 1.iso / Essentials / Developer Essentials Jul 90 / Programming / MPW Interfaces & Libraries 3.1 / AIncludes / MIDI.a < prev    next >
Encoding:
Text File  |  1989-10-13  |  11.3 KB  |  485 lines  |  [TEXT/MPS ]

  1. ; Version: 2.53
  2. ; Created: Friday, September 8, 1989 at 5:39:33 PM
  3.  
  4. ;;;
  5. ;;; MIDI.a
  6. ;;;
  7. ;;; This file contains the assembly-language interface for the MIDI Manager.
  8. ;;;
  9. ;;; Author: John Worthington, Don Marsh, Mark Lentczner
  10. ;;; Copyright © 1988, Apple Computer, Inc.
  11. ;;; All Rights Reserved
  12. ;;;
  13.  
  14.  
  15.  
  16.  
  17. ;;; _______________________________________________________________________________
  18. ;;;
  19. ;;;  Constants:
  20. ;;;
  21.  
  22. midiToolNum       EQU         4                         ; tool number of MIDI Mgr for SndDispVersion call.
  23. midiMaxNameLen    EQU         31                        ; maximum number of characters in port and client names
  24.  
  25.  
  26. ; Time formats
  27.  
  28. midiFormatMSec    EQU         0                         ; milliseconds
  29. midiFormatBeats   EQU         1                         ; beats
  30. midiFormat24fpsBit EQU        2                         ; 24 frames/sec.
  31. midiFormat25fpsBit EQU        3                         ; 25 frames/sec.
  32. midiFormat30fpsDBit EQU       4                         ; 30 frames/sec. drop-frame
  33. midiFormat30fpsBit EQU        5                         ; 30 frames/sec.
  34. midiFormat24fpsQF EQU         6                         ; 24 frames/sec. longInt format
  35. midiFormat25fpsQF EQU         7                         ; 25 frames/sec. longInt format
  36. midiFormat30fpsDQF EQU        8                         ; 30 frames/sec. drop-frame longInt format
  37. midiFormat30fpsQF EQU         9                         ; 30 frames/sec. longInt format
  38. midiInternalSync  EQU         0                         ; internally synced
  39. midiExternalSync  EQU         1                         ; externally synced
  40.  
  41.  
  42. ; Port types
  43.  
  44. midiPortTypeTime  EQU         0                         ; time port
  45. midiPortTypeInput EQU         1                         ; input port
  46. midiPortTypeOutput EQU        2                         ; output port
  47. midiPortTypeTimeInv EQU       3                         ; invisible time port
  48.  
  49.  
  50. ; OffsetTimes
  51.  
  52. midiGetEverything EQU         $7FFFFFFF                 ; get all packets, regardless of time stamps
  53. midiGetNothing    EQU         $80000000                 ; get no packets, regardless of time stamps
  54. midiGetCurrent    EQU         $00000000                 ; get current packets only
  55.  
  56.  
  57.  
  58. ;;;
  59. ;;; MIDI data and messages are passed in MIDIPacket records (see below).
  60. ;;; The first byte of every MIDIPacket contains a set of flags
  61. ;;;
  62. ;;; bits 0-1   00 = new MIDIPacket, not continued
  63. ;;;                01 = begining of continued MIDIPacket
  64. ;;;                10 = end of continued MIDIPacket
  65. ;;;                11 = continuation
  66. ;;; bits 2-3            reserved
  67. ;;;
  68. ;;;bits 4-6  000 = MIDIPacket contains MIDI data
  69. ;;;               001 = MIDIPacket contains MIDI Manager message
  70. ;;;
  71. ;;;  bit 7          0 = MIDIPacket has valid stamp
  72. ;;;                   1 = stamp with current clock
  73. ;;;
  74.  
  75. midiContMask      EQU         $03
  76. midiNoCont        EQU         $00
  77. midiStartCont     EQU         $01
  78. midiMidCont       EQU         $03
  79. midiEndCont       EQU         $02
  80. midiTypeMask      EQU         $70
  81. midiMsgType       EQU         $00
  82. midiMgrType       EQU         $10
  83. midiTimeStampMask EQU         $80
  84. midiTimeStampCurrent EQU      $80
  85. midiTimeStampValid EQU        $00
  86.  
  87.  
  88. ;  MIDI Manager MIDIPacket command words (the first word in the data field 
  89. ;  for midiMgrType messages)
  90.  
  91. midiOverflowErr   EQU         $0001
  92. midiSCCErr        EQU         $0002
  93. midiPacketErr     EQU         $0003
  94. midiMaxErr        EQU         $00FF                     ; all command words less than this value
  95. ;   are error indicators
  96.  
  97. ;;; _______________________________________________________________________________
  98. ;;;
  99. ;;;  valid results to be returned from readHooks
  100. ;;;
  101.  
  102. midiKeepPacket    EQU         0
  103. midiMorePacket    EQU         1
  104. midiNoMorePacket  EQU         2
  105.  
  106.  
  107. ;;; _______________________________________________________________________________
  108. ;;;
  109. ;;;  Errors:
  110. ;;;
  111.  
  112. midiNoClientErr   EQU         -250                      ; no client with that ID found
  113. midiNoPortErr     EQU         -251                      ; no port with that ID found
  114. midiTooManyPortsErr EQU       -252                      ; too many ports already installed in the system
  115. midiTooManyConsErr EQU        -253                      ; too many connections made
  116. midiVConnectErr   EQU         -254                      ; pending virtual connection created
  117. midiVConnectMade  EQU         -255                      ; pending virtual connection resolved
  118. midiVConnectRmvd  EQU         -256                      ; pending virtual connection removed
  119. midiNoConErr      EQU         -257                      ; no connection exists between specified ports
  120. midiWriteErr      EQU         -258                      ; MIDIWritePacket couldn't write to all connected ports
  121. midiNameLenErr    EQU         -259                      ; name supplied is longer than 31 characters
  122. midiDupIDErr      EQU         -260                      ; duplicate client ID
  123. midiInvalidCmdErr EQU         -261                      ; command not supported for port type
  124.  
  125.  
  126. ;;; _______________________________________________________________________________
  127. ;;;
  128. ;;;  Driver calls:
  129. ;;;
  130.  
  131. midiOpenDriver    EQU         1
  132. midiCloseDriver   EQU         2
  133.  
  134.  
  135.  
  136. ;;; ________________________________________________________________________________
  137. ;;;
  138. ;;;  MIDI data and other messages are read and written in packets:
  139. ;;;
  140.  
  141. MIDIPacket        RECORD      0
  142. flags             DS.B        1
  143. len               DS.B        1
  144. tStamp            DS.L        1
  145. data              EQU         *
  146.                   ENDR
  147.  
  148.  
  149. ;;; _______________________________________________________________________________
  150. ;;;
  151. ;;;  port information
  152. ;;;
  153.  
  154. MIDIIDRec         RECORD      0
  155. clientID          DS.L        1
  156. portID            DS.L        1
  157.                   ENDR
  158.  
  159. MIDIPortParams    RECORD      0
  160. portID            DS.L        1                         ; ID of port, unique within client
  161. portType          DS.W        1                         ; Type of port - input, output, time, etc.
  162. timeBase          DS.W        1                         ; refnum of time base, 0 if none
  163. offsetTime        DS.L        1                         ; offset for current time stamps
  164. readHook          DS.L        1                         ; routine to call when input data is valid
  165. refCon            DS.L        1                         ; refcon for port (for client use)
  166. sync              DS.W        1                         ; internal, external,other
  167. curTime           DS.L        1                         ; current local time for the port
  168. format            DS.W        1                         ; time code format in use
  169. name              DS.B        256                       ; name of the port. This is a real live string, not a ptr.
  170.  
  171. size              EQU         *                         ; size of port params
  172.                   ENDR
  173.  
  174. MIDIPortInfo      RECORD      0
  175. portType          DS.W        1                         ; type of port
  176. timeBase          DS.L        2                         ; MIDIIDRec for time base
  177. numConnects       DS.W        1                         ; number of connections
  178. cList             EQU         *                         ; ARRAY [1..numConnects] of MIDIIDRec 
  179.                   ENDR
  180.  
  181.  
  182. ;;; _______________________________________________________________________________
  183. ;;;
  184. ;;; Clocks:
  185. ;;;
  186.  
  187. MIDIClkInfo       RECORD      0
  188. sync              DS.W        1                         ; 0 = internal,  1 = external
  189. curTime           DS.L        1                         ; current value of port's clock
  190. format            DS.W        1                         ; time code format
  191. size              EQU         *                         ; size of MIDIClkInfo
  192.                   ENDR
  193.  
  194.  
  195. ;;; _______________________________________________________________________________
  196. ;;;
  197. ;;;  Equates for function selectors
  198. ;;;
  199.  
  200. midiVersion       EQU         0
  201. midiSignIn        EQU         4
  202. midiSignOut       EQU         8
  203. midiGetClients    EQU         12
  204. midiGetClientName EQU         16
  205. midiSetClientName EQU         20
  206. midiGetPorts      EQU         24
  207. midiAddPort       EQU         28
  208. midiGetPortInfo   EQU         32
  209. midiConnectData   EQU         36
  210. midiUnConnectData EQU         40
  211. midiConnectTime   EQU         44
  212. midiUnConnectTime EQU         48
  213. midiFlush         EQU         52
  214. midiGetReadHook   EQU         56
  215. midiSetReadHook   EQU         60
  216. midiGetPortName   EQU         64
  217. midiSetPortName   EQU         68
  218. midiWakeUp        EQU         72
  219. midiRemovePort    EQU         76
  220. midiGetSync       EQU         80
  221. midiSetSync       EQU         84
  222. midiGetCurTime    EQU         88
  223. midiSetCurTime    EQU         92
  224. midiStartTime     EQU         96
  225. midiStopTime      EQU         100
  226. midiPoll          EQU         104
  227. midiWritePacket   EQU         108
  228. midiWorldChanged  EQU         112
  229. midiGetOffsetTime EQU         116
  230. midiSetOffsetTime EQU         120
  231. midiConvertTime   EQU         124
  232. midiGetRefCon     EQU         128
  233. midiSetRefCon     EQU         132
  234. midiGetClRefCon   EQU         136
  235. midiSetClRefCon   EQU         140
  236. midiGetTCFormat   EQU         144
  237. midiSetTCFormat   EQU         148
  238. midiSetRunRate    EQU         152
  239. midiGetClientIcon EQU         156
  240.  
  241.  
  242. ;;; ________________________________________________________________________________
  243. ;;;
  244. ;;; Call Macros for Assembly
  245. ;;;
  246.  
  247. ;;
  248. ;; Sound Dispatch trap (if not already defined)
  249. ;;
  250.                   IF          &TYPE('_SoundDispatch') = 'UNDEFINED' THEN
  251. _SoundDispatch    OPWORD      $A800
  252.                   ENDIF
  253.  
  254.  
  255.                                                         ;;
  256.                                                         ;;  fake _SndDispVersion which calls glue to make sure that the sound
  257.                                                         ;;  dispatcher has been installed
  258.                                                         ;;
  259.                   MACRO
  260. &label            _SndDispVersion
  261.                   IMPORT      SndDispVersion
  262. &label            JSR         SndDispVersion                
  263.                                                         ; call the sound dispatcher glue in MIDIGlue.o
  264.                   ENDM
  265.  
  266.  
  267.                   MACRO
  268. &label            _CallMIDIMgr &selector
  269. &label            MOVE.L      #(&selector<<16)+midiToolNum,D0
  270.                   _SoundDispatch
  271.                   ENDM
  272.  
  273.  
  274.                   MACRO
  275. &label            _MIDISignIn
  276. &label            _CallMIDIMgr midiSignIn
  277.                   MEND
  278.  
  279.                   MACRO
  280. &label            _MIDISignOut
  281. &label            _CallMIDIMgr midiSignOut
  282.                   MEND
  283.  
  284.                   MACRO
  285. &label            _MIDIVersion
  286. &label            _CallMIDIMgr midiVersion
  287.                   MEND
  288.  
  289.                   MACRO
  290. &label            _MIDIGetClients
  291. &label            _CallMIDIMgr midiGetClients
  292.                   MEND
  293.  
  294.                   MACRO
  295. &label            _MIDIGetClientName
  296. &label            _CallMIDIMgr midiGetClientName
  297.                   MEND
  298.  
  299.                   MACRO
  300. &label            _MIDISetClientName
  301. &label            _CallMIDIMgr midiSetClientName
  302.                   MEND
  303.  
  304.                   MACRO
  305. &label            _MMGetClientIcon
  306. &label            _CallMIDIMgr nGetClientIcon
  307.                   MEND
  308.  
  309.                   MACRO
  310. &label            _MIDIGetPorts
  311. &label            _CallMIDIMgr midiGetPorts
  312.                   MEND
  313.                   MACRO
  314. &label            _MIDIAddPort
  315. &label            _CallMIDIMgr midiAddPort
  316.                   MEND
  317.  
  318.  
  319.                   MACRO
  320. &label            _MIDIGetPortInfo
  321. &label            _CallMIDIMgr midiGetPortInfo
  322.                   MEND
  323.  
  324.                   MACRO
  325. &label            _MIDIConnectData
  326. &label            _CallMIDIMgr midiConnectData
  327.                   MEND
  328.  
  329.  
  330.                   MACRO
  331. &label            _MIDIUnConnectData
  332. &label            _CallMIDIMgr midiUnConnectData
  333.                   MEND
  334.  
  335.                   MACRO
  336. &label            _MIDIConnectTime
  337. &label            _CallMIDIMgr midiConnectTime
  338.                   MEND
  339.  
  340.                   MACRO
  341. &label            _MIDIUnConnectTime
  342. &label            _CallMIDIMgr midiUnConnectTime
  343.                   MEND
  344.  
  345.                   MACRO
  346. &label            _MIDIFlush
  347. &label            _CallMIDIMgr midiFlush
  348.                   MEND
  349.  
  350.                   MACRO
  351. &label            _MIDIGetReadHook
  352. &label            _CallMIDIMgr midiGetReadHook
  353.                   MEND
  354.  
  355.                   MACRO
  356. &label            _MIDISetReadHook
  357. &label            _CallMIDIMgr midiSetReadHook
  358.                   MEND
  359.  
  360.                   MACRO
  361. &label            _MIDIGetPortName
  362. &label            _CallMIDIMgr midiGetPortName
  363.                   MEND
  364.  
  365.                   MACRO
  366. &label            _MIDISetPortName
  367. &label            _CallMIDIMgr midiSetPortName
  368.                   MEND
  369.  
  370.                   MACRO
  371. &label            _MIDIWakeUp
  372. &label            _CallMIDIMgr midiWakeUp
  373.                   MEND
  374.  
  375.                   MACRO
  376. &label            _MIDIRemovePort
  377. &label            _CallMIDIMgr midiRemovePort
  378.                   MEND
  379.  
  380.                   MACRO
  381. &label            _MIDIGetSync
  382. &label            _CallMIDIMgr midiGetSync
  383.                   MEND
  384.  
  385.  
  386.  
  387.  
  388.  
  389.                   MACRO
  390. &label            _MIDISetSync
  391. &label            _CallMIDIMgr midiSetSync
  392.                   MEND
  393.  
  394.                   MACRO
  395. &label            _MIDIGetCurTime
  396. &label            _CallMIDIMgr midiGetCurTime
  397.                   MEND
  398.  
  399.                   MACRO
  400. &label            _MIDISetCurTime
  401. &label            _CallMIDIMgr midiSetCurTime
  402.                   MEND
  403.  
  404.                   MACRO
  405. &label            _MIDIStartTime
  406. &label            _CallMIDIMgr midiStartTime
  407.                   MEND
  408.  
  409.                   MACRO
  410. &label            _MIDIStopTime
  411. &label            _CallMIDIMgr midiStopTime
  412.                   MEND
  413.  
  414.                   MACRO
  415. &label            _MIDIPoll
  416. &label            _CallMIDIMgr midiPoll
  417.                   MEND
  418.  
  419.                   MACRO
  420. &label            _MIDIWritePacket
  421. &label            _CallMIDIMgr midiWritePacket
  422.                   MEND
  423.  
  424.                   MACRO
  425. &label            _MIDIWorldChanged
  426. &label            _CallMIDIMgr midiWorldChanged
  427.                   MEND
  428.  
  429.                   MACRO
  430. &label            _MIDIGetOffsetTime
  431. &label            _CallMIDIMgr midiGetOffsetTime
  432.                   MEND
  433.  
  434.                   MACRO
  435. &label            _MIDISetOffsetTime
  436. &label            _CallMIDIMgr midiSetOffsetTime
  437.                   MEND
  438.  
  439.                   MACRO
  440. &label            _MIDIConvertTime
  441. &label            _CallMIDIMgr midiConvertTime
  442.                   MEND
  443.  
  444.                   MACRO
  445. &label            _MIDIGetRefCon
  446. &label            _CallMIDIMgr midiGetRefCon
  447.                   MEND
  448.  
  449.                   MACRO
  450. &label            _MIDISetRefCon
  451. &label            _CallMIDIMgr midiSetRefCon
  452.                   MEND
  453.  
  454.                   MACRO
  455. &label            _MIDIGetClRefCon
  456. &label            _CallMIDIMgr midiGetClRefCon
  457.                   MEND
  458.  
  459.                   MACRO
  460. &label            _MIDISetClRefCon
  461. &label            _CallMIDIMgr midiSetClRefCon
  462.                   MEND
  463.  
  464.                   MACRO
  465. &label            _MIDIGetTCFormat
  466. &label            _CallMIDIMgr midiGetTCFormat
  467.                   MEND
  468.  
  469.                   MACRO
  470. &label            _MIDISetTCFormat
  471. &label            _CallMIDIMgr midiSetTCFormat
  472.                   MEND
  473.  
  474.                   MACRO
  475. &label            _MIDISetRunRate
  476. &label            _CallMIDIMgr midiSetRunRate
  477.                   MEND
  478.  
  479.                   MACRO
  480. &label            _MIDIGetClientIcon
  481. &label            _CallMIDIMgr midiGetClientIcon
  482.                   MEND
  483.  
  484.  
  485.